/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnfMantenimientoProductos.java
 *
 * Created on 18/10/2011, 02:41:55 PM
 */

package visual.Ingreso;

import bentity.*;
import java.awt.Dimension;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import bentity.beProducto;
import blogic.blHelper;
import blogic.blLog;
import blogic.blLote;
import blogic.blProducto;
import blogic.blProveedor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import visual.Seguridad.visualHelper;

/**
 *
 * @author giulio
 */
public class pnfMantenimientoProductos extends javax.swing.JPanel {
    private DefaultTableModel dtm;
    private beUsuario usuario=null;

    /** Creates new form pnfMantenimientoProductos */
    public pnfMantenimientoProductos(beUsuario usuario) throws SQLException {
        initComponents();
        
        try{
            this.usuario=usuario;

            this.dtm = (DefaultTableModel)this.tblProductos.getModel();

            blHelper blh=new blHelper();
            ArrayList<beCombo> comboObjeto=new ArrayList<beCombo>();

            comboObjeto=(new blProducto()).llenarComboTipoProducto(true,"Todos");
            this.cbxTipoProducto.setModel(blh.ComboBoxItem(comboObjeto));

            comboObjeto=(new blProveedor().llenarComboProveedor(true,"Todos"));
            this.cbxProveedor.setModel(blh.ComboBoxItem(comboObjeto));

            this.dtm.setNumRows(0);

        }catch(Exception e){}

    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane2 = new javax.swing.JScrollPane();
        tblProductos = new javax.swing.JTable();
        lblTitulo = new javax.swing.JLabel();
        gpbBusqueda = new javax.swing.JPanel();
        btnBuscar = new javax.swing.JButton();
        lblCosto = new javax.swing.JLabel();
        txtCosto = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        lblNombre = new javax.swing.JLabel();
        lblProveedor = new javax.swing.JLabel();
        cbxProveedor = new javax.swing.JComboBox();
        lblTipoProducto = new javax.swing.JLabel();
        cbxTipoProducto = new javax.swing.JComboBox();
        lblTablaProductos = new javax.swing.JLabel();
        btnRegistrar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();

        setLayout(null);

        tblProductos.setAutoCreateRowSorter(true);
        tblProductos.setFont(new java.awt.Font("Dialog", 0, 12));
        tblProductos.setForeground(new java.awt.Color(0, 0, 0));
        tblProductos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Codigo", "Nombre", "Precio de Venta", "Tipo Producto"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblProductos.setColumnSelectionAllowed(true);
        tblProductos.setGridColor(javax.swing.UIManager.getDefaults().getColor("TableHeader.background"));
        tblProductos.setMaximumSize(new java.awt.Dimension(800, 72));
        tblProductos.setMinimumSize(new java.awt.Dimension(200, 72));
        tblProductos.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tblProductos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tblProductos.getTableHeader().setReorderingAllowed(false);
        tblProductos.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                tblProductosFocusGained(evt);
            }
            public void focusLost(java.awt.event.FocusEvent evt) {
                tblProductosFocusLost(evt);
            }
        });
        jScrollPane2.setViewportView(tblProductos);
        tblProductos.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        add(jScrollPane2);
        jScrollPane2.setBounds(140, 270, 670, 170);

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Mantenimiento de productos");
        add(lblTitulo);
        lblTitulo.setBounds(220, 20, 519, 43);

        gpbBusqueda.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Busqueda de Productos", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        gpbBusqueda.setForeground(java.awt.Color.black);
        gpbBusqueda.setLayout(null);

        btnBuscar.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscar.setForeground(new java.awt.Color(0, 0, 0));
        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        gpbBusqueda.add(btnBuscar);
        btnBuscar.setBounds(520, 120, 130, 27);

        lblCosto.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCosto.setForeground(new java.awt.Color(0, 0, 0));
        lblCosto.setText("Precio venta (S/.)");
        gpbBusqueda.add(lblCosto);
        lblCosto.setBounds(20, 80, 140, 15);

        txtCosto.setFont(new java.awt.Font("Dialog", 0, 13));
        txtCosto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCostoKeyTyped(evt);
            }
        });
        gpbBusqueda.add(txtCosto);
        txtCosto.setBounds(130, 80, 180, 27);

        txtNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        txtNombre.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNombreActionPerformed(evt);
            }
        });
        txtNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreKeyTyped(evt);
            }
        });
        gpbBusqueda.add(txtNombre);
        txtNombre.setBounds(130, 40, 180, 25);

        lblNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        lblNombre.setForeground(new java.awt.Color(0, 0, 0));
        lblNombre.setText("Nombre");
        gpbBusqueda.add(lblNombre);
        lblNombre.setBounds(20, 40, 49, 15);

        lblProveedor.setFont(new java.awt.Font("Dialog", 0, 12));
        lblProveedor.setForeground(new java.awt.Color(0, 0, 0));
        lblProveedor.setText("Proveedor");
        gpbBusqueda.add(lblProveedor);
        lblProveedor.setBounds(340, 40, 64, 15);

        cbxProveedor.setFont(new java.awt.Font("Dialog", 0, 12));
        cbxProveedor.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cbxProveedor.setSelectedItem(null);
        gpbBusqueda.add(cbxProveedor);
        cbxProveedor.setBounds(460, 40, 190, 25);

        lblTipoProducto.setFont(new java.awt.Font("Dialog", 0, 12));
        lblTipoProducto.setForeground(new java.awt.Color(0, 0, 0));
        lblTipoProducto.setText("Tipo de producto");
        gpbBusqueda.add(lblTipoProducto);
        lblTipoProducto.setBounds(340, 80, 107, 15);

        cbxTipoProducto.setFont(new java.awt.Font("Dialog", 0, 12));
        cbxTipoProducto.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cbxTipoProducto.setSelectedItem(null);
        cbxTipoProducto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbxTipoProductoActionPerformed(evt);
            }
        });
        gpbBusqueda.add(cbxTipoProducto);
        cbxTipoProducto.setBounds(460, 80, 190, 25);

        add(gpbBusqueda);
        gpbBusqueda.setBounds(130, 70, 700, 170);

        lblTablaProductos.setFont(new java.awt.Font("Dialog", 0, 14));
        lblTablaProductos.setForeground(new java.awt.Color(0, 0, 0));
        lblTablaProductos.setText("Productos");
        add(lblTablaProductos);
        lblTablaProductos.setBounds(170, 250, 160, 15);

        btnRegistrar.setBackground(new java.awt.Color(240, 235, 226));
        btnRegistrar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnRegistrar.setForeground(new java.awt.Color(0, 0, 0));
        btnRegistrar.setText("Registrar");
        btnRegistrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarActionPerformed(evt);
            }
        });
        add(btnRegistrar);
        btnRegistrar.setBounds(200, 450, 110, 27);

        btnModificar.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar.setFont(new java.awt.Font("DejaVu Sans", 0, 12));
        btnModificar.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        add(btnModificar);
        btnModificar.setBounds(410, 450, 120, 29);

        btnEliminar.setBackground(new java.awt.Color(240, 235, 226));
        btnEliminar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnEliminar.setForeground(new java.awt.Color(0, 0, 0));
        btnEliminar.setText("Eliminar");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        add(btnEliminar);
        btnEliminar.setBounds(630, 450, 110, 27);
    }// </editor-fold>//GEN-END:initComponents

    private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarActionPerformed
        dlgRegistroProductos dlgRegProd= new dlgRegistroProductos(null, true,usuario);
        dlgRegProd.setVisible(true);
}//GEN-LAST:event_btnRegistrarActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed

        try {
            buscarYMostrar();
        } catch (Exception ex) {
            ex.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un mensaje en la búsqueda. Inténtelo nuevamente");

        }

    }//GEN-LAST:event_btnBuscarActionPerformed

    private void cbxTipoProductoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbxTipoProductoActionPerformed

    }//GEN-LAST:event_cbxTipoProductoActionPerformed

    private void tblProductosFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tblProductosFocusGained
//        this.btnModificar.setEnabled(true);
//        this.btnEliminar.setEnabled(true);
    }//GEN-LAST:event_tblProductosFocusGained

    private void tblProductosFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_tblProductosFocusLost
//        this.btnModificar.setEnabled(false);
//        this.btnEliminar.setEnabled(false);
    }//GEN-LAST:event_tblProductosFocusLost

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        int idProducto=-1;
        int indice=-1;
        String nombreProducto="";


        try{

        indice=this.tblProductos.getSelectedRow();
        
        if(indice==-1) return;

        nombreProducto=this.tblProductos.getValueAt(indice, 1).toString();
        idProducto=Integer.parseInt(this.tblProductos.getValueAt(indice, 0).toString());

        int cantLotes=(new blLote().contarLotesDeUnProducto(idProducto));

        if(cantLotes>0){
            visualHelper.mostrarMensajeAdvertencia("No se puede eliminar el producto porque tiene lotes asignados.");
            return;
        }

        int rslt=visualHelper.mostrarPreguntaSiNo("¿Está seguro que desea eliminar el producto "+nombreProducto+" con código "+idProducto+"?");
        if (rslt == JOptionPane.NO_OPTION){
            return;
        }

        (new blProducto()).eliminarProducto(idProducto);
        int rLog=(new blLog().registrarLog(usuario.getIdUsuario(), usuario.getCargo(), "Se ha eliminado el producto "+idProducto));
        
        visualHelper.mostrarMensajeSatisfaccion("Se ha eliminado el producto "+nombreProducto+" con código "+idProducto+" satisfactoriamente");

        this.buscarYMostrar();


        }catch(Exception e){
            visualHelper.mostrarMensajeError("Ha ocurrido un error, inténtelo nuevamente");
            e.printStackTrace();
        }


    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        int idProducto=-1;
        String nombreProducto="";

        if(this.tblProductos.getSelectedRow()==-1) return;

        
        for(int i=0;i<this.tblProductos.getRowCount();i++){
                if(this.tblProductos.isRowSelected(i)){
                    idProducto=Integer.parseInt(this.tblProductos.getValueAt(i, 0).toString());
                    nombreProducto=this.tblProductos.getValueAt(i, 1).toString();
                }
        }
            dlgModificarProducto dlgModProd= new dlgModificarProducto(null, true,idProducto,usuario);
            dlgModProd.setVisible(true);


       try{
            this.buscarYMostrar();
       }catch(Exception e){
            e.printStackTrace();
       }
    
        
    }//GEN-LAST:event_btnModificarActionPerformed

    private void txtNombreActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtNombreActionPerformed
      
    }//GEN-LAST:event_txtNombreActionPerformed

    private void txtCostoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCostoKeyTyped
        String strCosto = this.txtCosto.getText();
        int i = strCosto.indexOf(".");
        if (i==-1){
            if (strCosto.length() > 7)
                visualHelper.soloPuntos(evt);
            else
                visualHelper.soloDigitosYPunto(evt);
        }
        else{
            if(strCosto.length()>(i+4)){
                visualHelper.ningunCaracterEnTextField(evt);
            }
            else{
            visualHelper.soloDigitosEnTextField(evt);
            }
        }
    }//GEN-LAST:event_txtCostoKeyTyped

    private void txtNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreKeyTyped
        String strNombre = this.txtNombre.getText();
        if (strNombre.length() >= 50)
            visualHelper.ningunCaracterEnTextField(evt);
        else
            visualHelper.soloNombres(evt);
    }//GEN-LAST:event_txtNombreKeyTyped


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JComboBox cbxProveedor;
    private javax.swing.JComboBox cbxTipoProducto;
    private javax.swing.JPanel gpbBusqueda;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblCosto;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblProveedor;
    private javax.swing.JLabel lblTablaProductos;
    private javax.swing.JLabel lblTipoProducto;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblProductos;
    private javax.swing.JTextField txtCosto;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    private ArrayList<beProducto> buscarProductos() throws Exception{
        blHelper blh=new blHelper();
        String nombreProducto="";
        String costoProducto="";
        int tipoProducto=-1;
        int proveedorProducto=-1;
        ArrayList<beProducto> listaProductos=new ArrayList<beProducto>();

        if(!this.txtCosto.getText().equals("") && !blh.cadenaSoloDouble(this.txtCosto.getText())){
            visualHelper.mostrarMensajeAdvertencia("El campo Costo solo puede contener carácteres numéricos");
            return null;
        }

        if(!this.txtNombre.getText().equals("")) nombreProducto=this.txtNombre.getText();
        if(!this.txtCosto.getText().equals("")) costoProducto=this.txtCosto.getText();
        if(this.cbxTipoProducto.getSelectedIndex()>=0) tipoProducto=((beItem)this.cbxTipoProducto.getSelectedItem()).getId();
        if(this.cbxProveedor.getSelectedIndex()>=0) proveedorProducto=((beItem)this.cbxProveedor.getSelectedItem()).getId();

        listaProductos=(new blProducto()).busquedaProductosBL(nombreProducto,costoProducto,tipoProducto,proveedorProducto);
        if(listaProductos==null || listaProductos.size()==0) {
            visualHelper.mostrarMensajeAdvertencia("No se ha encontrado ningún producto con los parámetros ingresados.");
            return null;
        }

        return listaProductos;

    }

    private void mostrarProductos(ArrayList<beProducto> listaProductos) throws Exception{

        if (listaProductos==null || listaProductos.size()==0) return;

        limpiarTabla();

        Object [] datos = new Object [4];
        for(int i=0;i<listaProductos.size();i++){
            datos[0] = listaProductos.get(i).getIdProducto();
            datos[1] = listaProductos.get(i).getNombre();
            datos[2] = listaProductos.get(i).getCosto();
            datos[3] = (new blProducto()).devuelveTipoProducto(listaProductos.get(i).getTipoProducto()).getDescripcion();
            dtm.addRow(datos);
        }

        this.tblProductos.setRowSelectionAllowed(true);
        this.tblProductos.setColumnSelectionAllowed(false);

    }

    private void buscarYMostrar()throws Exception{
        ArrayList<beProducto> listaProductos=new ArrayList<beProducto>();
        listaProductos = buscarProductos();

        if(listaProductos==null) {
            limpiarTabla();
            visualHelper.mostrarMensajeAdvertencia("No se encontraron productos");
            return;
        }

        mostrarProductos(listaProductos);
    }

    private void limpiarTabla() {

        for(int i=0;i<=dtm.getRowCount()-1;){
            dtm.removeRow(0);
        }
    }

}
